<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script src="./js/lodash.js"></script>
    <script>
      // chunk(arr, [size = 1]): 将将数组（array）拆分成多个 size 长度的区块，并将这些区块组成一个新数组。
      console.log(_.chunk(["a", "b", "c", "d"], 2)); // ['a', 'b']  ['c', 'd']

      // compact(arr): 创建一个新数组，包含原数组中所有的非假值元素。例如false, null,0, "", undefined, 和 NaN 都是被认为是“假值”。
      console.log(_.compact([0, 1, false, 2, "", 3])); // [1, 2, 3]

      // difference(array, [values]): 创建一个具有唯一array值的数组，每个值不包含在其他给定的数组中
      console.log(_.difference([3, 2, 1], [4, 2])); // [3, 1]

      // differenceBy(array, [values], [iteratee=_.identity]): 这个方法类似_.difference ，除了它接受一个 iteratee （注：迭代器）
      console.log(_.differenceBy([3.1, 2.2, 1.3], [4.4, 2.5], Math.floor)); // [3.1, 1.3]

      // differenceWith(array, [values], [comparator]):这个方法类似_.difference ，除了它接受一个 comparator （注：比较器）
      console.log(
        // [{x: 2, y: 1}]
        _.differenceWith(
          [
            { x: 1, y: 2 },
            { x: 2, y: 1 },
          ],
          [{ x: 1, y: 2 }],
          _.isEqual
        )
      );

      // drop(array, [n=1]): 创建一个切片数组，去除array前面的n个元素。（n默认值为1。）
      console.log(_.drop([1, 2, 3], 2)); // [3]

      // _.take(array, [n=1]): 创建一个数组切片，从array数组的起始元素开始提取n个元素。
      console.log(_.take([1, 2, 3], 2)); // [1, 2]

      // _.flatten(array): 减少一级array嵌套深度。
      console.log(_.flatten([1, [2, [3, [4]], 5]])); // [1, 2, [3,[4]], 5]

      // _.flattenDeep(array): 将array递归为一维数组。
      console.log(_.flattenDeep([1, [2, [3, [4]], 5]])); // [1, 2, 3, 4, 5]

      // _.flattenDepth(array, [depth=1]): 根据 depth 递归减少 array 的嵌套层级
      console.log(_.flattenDepth([1, [2, [3, [4]], 5]], 1)); // [1, 2, [3,[4]], 5]

      //_.intersection([arrays]): 创建唯一值的数组，这个数组包含所有给定数组都包含的元素，
      // 使用SameValueZero进行相等性比较。（注：可以理解为给定数组的交集）
      console.log(_.intersection([2, 1], [4, 2], [1, 2])); // [2]

      //_.union([arrays]): arrays（数组）的并集，按顺序返回，返回数组的元素是唯一的）
      console.log(_.union([2], [1, 2])); // [2, 1]

      // _.xor([arrays]): 创建一个给定数组唯一值的数组，使用symmetric difference做等值比较。返回值的顺序取决于他们数组的出现顺序
      console.log(_.xor([2, 1], [2, 3])); // [1, 3]

      // _.nth(array, [n=0]): 获取array数组的第n个元素。如果n为负数，则返回从数组结尾开始的第n个元素。
      console.log(
        // b c
        _.nth(["a", "b", "c", "d"], 1),
        _.nth(["a", "b", "c", "d"], -2)
      );

      // _.remove(array, [predicate=_.identity])
      let arr = ["a", "b", "c", "d", "e"];
      _.remove(arr, function (value, index, array) {
        return index > 2;
      });
      console.log(arr); // ['a', 'b', 'c']

      // _.without(array, [values]) 创建一个剔除所有给定值的新数组，剔除值的时候，使用SameValueZero做相等比较。
      console.log(_.without([2, 1, 2, 3], 1, 2)); // [3]

      // _.uniq(array): 创建一个去重后的array数组副本
      console.log(_.uniq([2, 1, 2])); // [2, 1]

      // _.zip()
      console.log(
        _.zip(["小明", "小红", "小刚"], ["男", "女", "男"], [12, 13, 14]) // [['小明', '男', 12], ['小红', '女', 13], ['小刚', '男', 14]]
      );

      console.log(
        _.zipObject(["小明", "小红", "小刚"], ["男", "女", "男"], [12, 13, 14]) // {小明: '男', 小红: '女', 小刚: '男'}
      );

      // unzip()
      console.log(
        _.unzip(
          _.zip(["小明", "小红", "小刚"], ["男", "女", "男"], [12, 13, 14]) // ["小明", "小红", "小刚"], ["男", "女", "男"], [12, 13, 14]
        )
      );
    </script>
  </body>
</html>
